iT邦幫忙

2024 iThome 鐵人賽

DAY 22
0
Python

初學者的 30 天 Python 復健課程系列 第 22

復健第二十二天:又來不及寫完的檔案處理

  • 分享至 

  • xImage
  •  

檔案處理

到目前為止,我們已經學習了不同的 Python 資料型態。通常,我們會將資料存儲在各種不同的檔案格式中。在本節中,我們將探討如何處理不同格式的檔案,例如 .txt.json.xml.csv.tsv.excel 等檔案格式。首先,讓我們從最常見的 .txt 檔案格式開始,學習如何進行檔案操作。

檔案操作是程式設計中的重要部分,讓我們可以創建、讀取、更新和刪除檔案。在 Python 中,我們使用內建的 open() 函數來處理檔案。

# 語法
open('filename', mode) # mode(r, a, w, x, t, b) 用來讀取、追加、寫入、創建、文本或二進位檔案
  • "r" 表示讀取(Read) - 預設值。打開一個檔案進行讀取,如果檔案不存在則返回錯誤。
  • "a" 表示追加(Append) - 打開一個檔案並在檔案末尾追加內容,如果檔案不存在則會創建。
  • "w" 表示寫入(Write) - 打開一個檔案進行寫入,如果檔案存在則覆蓋檔案內容,檔案不存在則會創建。
  • "x" 表示創建(Create) - 創建指定的檔案,如果檔案已存在則返回錯誤。
  • "t" 表示文本模式(Text) - 預設模式,處理文本檔案。
  • "b" 表示二進位模式(Binary) - 用於處理二進位檔案(例如圖片)。

讀取檔案

打開檔案的預設模式是讀取模式,因此我們不需要指定 rrt。假設已經創建並保存了一個名為 reading_file_example.txt 的檔案,讓我們看看如何讀取它:

f = open('./files/reading_file_example.txt')
print(f) # <_io.TextIOWrapper name='./files/reading_file_example.txt' mode='r' encoding='UTF-8'>

在上面的範例中,我們打印了已打開的檔案,並獲得了一些關於該檔案的資訊。已打開的檔案有不同的讀取方法:read()readline()readlines()。檔案打開後必須關閉,可以使用 close() 方法來完成。

  • read(): 讀取整個檔案的內容並以字串形式返回。如果我們想限制讀取的字符數,可以傳遞一個整數參數給 read(number) 方法。

    f = open('./files/reading_file_example.txt')
    txt = f.read()
    print(type(txt)) # <class 'str'>
    print(txt)
    f.close()
    

    上面的範例中,我們讀取了整個檔案的內容。讓我們看看如何只讀取前 10 個字符:

    f = open('./files/reading_file_example.txt')
    txt = f.read(10)
    print(txt)  # This is an
    f.close()
    

    如果在關閉檔案後再次嘗試讀取,會引發 ValueError: I/O operation on closed file 錯誤。因此,請記得在讀取之前打開檔案,並在完成後關閉檔案。

  • readline(): 讀取檔案的第一行內容。

    f = open('./files/reading_file_example.txt')
    line = f.readline()
    print(line) # This is an example to show how to open a file and read.
    f.close()
    
  • readlines(): 讀取檔案的所有行,並以列表形式返回每一行。

    f = open('./files/reading_file_example.txt')
    lines = f.readlines()
    print(lines)  # ['This is an example to show how to open a file and read.\n', 'This is the second line of the text.I love python']
    f.close()
    

寫入和更新檔案

若要寫入現有檔案,我們需要在 open() 函數中添加模式參數:

  • "a" 追加模式:將內容追加到檔案的末尾。如果檔案不存在,則創建一個新檔案。
  • "w" 寫入模式:會覆蓋現有內容。如果檔案不存在,則創建一個新檔案。

讓我們向檔案中追加一些文本:

with open('./files/reading_file_example.txt','a') as f:
    f.write('This text has to be appended at the end')

接下來,創建一個新檔案並寫入一些文本:

with open('./files/writing_file_example.txt','w') as f:
    f.write('This text will be written in a newly created file')

刪除檔案

我們可以使用 os 模組來刪除檔案:

import os
os.remove('./files/writing_file_example.txt')

如果檔案不存在,remove 方法會引發 FileNotFoundError 錯誤,因此可以使用條件語句來檢查檔案是否存在:

import os
if os.path.exists('./files/writing_file_example.txt'):
    os.remove('./files/writing_file_example.txt')
else:
    print('檔案不存在')

檔案類型

txt 檔案

txt 檔案是非常常見的資料形式,我們在上一節中已經介紹了。接下來,我們將探討 json 檔案。

json 檔案

JSON 全稱為 JavaScript Object Notation,實際上它是一個字串化的 JavaScript 物件Python 字典

範例:

# 字典
person_dict = {
    "name": "Asabeneh",
    "country": "Finland",
    "city": "Helsinki",
    "skills": ["JavaScrip", "React", "Python"]
}
# JSON 字串形式
person_json = '''{
    "name": "Asabeneh",
    "country": "Finland",
    "city": "Helsinki",
    "skills": ["JavaScrip", "React", "Python"]
}'''

將 JSON 轉換為字典

要將 JSON 轉換為 Python 字典,首先要匯入 json 模組,然後使用 loads 方法。

import json

# JSON
person_json = '''{
    "name": "Asabeneh",
    "country": "Finland",
    "city": "Helsinki",
    "skills": ["JavaScrip", "React", "Python"]
}'''

# 將 JSON 轉換為字典
person_dict = json.loads(person_json)
print(person_dict)
print(type(person_dict))  # <class 'dict'>
print(person_dict['name'])  # Asabeneh

將字典轉換為 JSON

要將 Python 字典轉換為 JSON,可以使用 json.dumps 方法。

import json

person = {
    "name": "Asabeneh",
    "country": "Finland",
    "city": "Helsinki",
    "skills": ["JavaScrip", "React", "Python"]
}

# 將字典轉換為 JSON
person_json = json.dumps(person, indent=4)
print(person_json)

儲存為 JSON 檔案

我們還可以將資料保存為 JSON 檔案:

import json

person = {
    "name": "Asabeneh",
    "country": "Finland",
    "city": "Helsinki",
    "skills": ["JavaScrip", "React", "Python"]
}

with open('./files/json_example.json', 'w', encoding='utf-8') as f:
    json.dump(person, f, ensure_ascii=False, indent=4)

csv 檔案

CSV(Comma Separated Values)是一種常見的數據格式,用於儲存表格資料。

範例:

"name","country","city","skills"
"Asabeneh","Finland","Helsinki","JavaScript"

讀取 CSV 檔案:

import csv

with open('./files/csv_example.csv') as f:
    csv_reader = csv.reader(f, delimiter=',')
    line_count = 0
    for row in csv_reader:
        if line_count == 0:


            print(f'Column names are: {", ".join(row)}')
        else:
            print(f'{row[0]} lives in {row[1]}, {row[2]}.')
        line_count += 1
    print(f'Number of lines: {line_count}')

xlsx 檔案

若要讀取 Excel 檔案,需要安裝 openpyxl 模組。

import openpyxl

excel_book = openpyxl.load_workbook('./files/excel_example.xlsx')
print(excel_book.sheetnames)
print(len(excel_book.sheetnames))

xml 檔案

XML 是另一種結構化的資料格式,與 HTML 類似。

範例:

<?xml version="1.0"?>
<person gender="female">
  <name>Asabeneh</name>
  <country>Finland</country>
  <city>Helsinki</city>
  <skills>
    <skill>JavaScrip</skill>
    <skill>React</skill>
    <skill>Python</skill>
  </skills>
</person>

讀取 XML 檔案:

import xml.etree.ElementTree as ET

tree = ET.parse('./files/xml_example.xml')
root = tree.getroot()
print('Root tag:', root.tag)
print('Attribute:', root.attrib)
for child in root:
    print('field: ', child.tag)

上一篇
復健第二十一天:來不及寫完的打包與解包
下一篇
復健第二十三天:只有 Python 還不夠,看我召喚強力外援 PIP
系列文
初學者的 30 天 Python 復健課程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言